(function($, peepso, factory){
ps_group=new (factory($, peepso))();
$(function(){
ps_group.init_page(+peepsogroupsdata.group_id);
});
})(jQuery, peepso, function($, peepso){
function PsGroup(){
this.ajax={};
this.cover={};
this.cover.x_position_percent=0;
this.cover.y_position_percent=0;
this.$cover_ct=jQuery('.js-focus-cover');
this.$cover_image=peepsogroupsdata.group_id
? jQuery('img#' + peepsogroupsdata.group_id)
: jQuery();
this.initial_cover_position=this.$cover_image.attr('style');
peepso.observer.addFilter('postbox_req',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('show_more_posts',
function(req){
if(+peepsogroupsdata.group_id){
req.stream_id=peepsogroupsdata.module_id;
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_validate_req',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_upload_req',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_get_list_photos',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_get_list_albums',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_create_album_req',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_add_photos_to_album_req',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_remove_temp_files',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_delete_album',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('photos_delete_stream_album',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('peepso_list_videos',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('tags_get_taggable_params',
function(req){
if(+peepsogroupsdata.group_id){
req.module_id=peepsogroupsdata.module_id;
req.group_id=peepsogroupsdata.group_id;
}
return req;
},
10,
1
);
peepso.observer.addFilter('show_avatar_dialog',
function(handler){
if(peepsogroupsdata.id){
return $.proxy(this.showAvatarDialog, this);
}else{
return handler;
}},
10,
1,
this
);
peepso.observer.addAction('group_name_updated',
function(groupId, name){
var $header;
if(+peepsogroupsdata.group_id===+groupId){
$header=$('.ps-js-group-header');
if($header.length){
$header.find('.ps-focus-title > span').text(name);
}}
},
10,
2,
this
);
peepso.observer.addAction('group_privacy_updated',
function(groupId, privacy){
if(+peepsogroupsdata.group_id===+groupId){
if($('.ps-page--group-edit').length){
window.location.reload();
}}
},
10,
2,
this
);
}
PsGroup.prototype.init_page=function(group_id){
if(group_id){
this._header_$el=$('.ps-js-group-header');
this._header_$actions=$('.ps-js-group-header-actions');
this._header_$actions_loadingHtml=this._header_$actions.eq(0).html();
this._header_$actions.html(this._header_$actions_loadingHtml);
this._get_data(group_id).done(function(data){
this._data=data;
peepso.observer.applyFilters('group_data', data);
});
peepso.observer.addFilter('group_data',
$.proxy(function(data){
this._update_header_actions(data);
}, this),
10,
1
);
this._header_$actions.on('click',
'.ps-js-join',
$.proxy(function(e){
var $loading=$(e.currentTarget)
.find('img')
.show();
this.join(group_id).done(function(data){
$loading.hide();
window.location.reload();
});
}, this)
);
this._header_$actions.on('click',
'.ps-js-leave',
$.proxy(function(e){
var $loading=$(e.currentTarget)
.find('img')
.show();
this.leave(group_id).done(function(data){
$loading.hide();
window.location.reload();
});
}, this)
);
this.init();
}
$(document.body).on('click',
'.ps-js-group-member-action',
$.proxy(function(e){
var $btn=$(e.currentTarget);
if($btn.data('ps-loading')){
return;
}
e.preventDefault();
e.stopPropagation();
var data=$.extend({}, $btn.data());
if(!data.method||!(data.id||group_id)){
return;
}
var $loading=$btn.find('img');
if(!$loading.length&&$btn.parent().hasClass('ps-js-dropdown-menu')){
$loading=$btn.parent().siblings('.ps-js-dropdown-toggle');
$loading=$loading.find('img');
$btn.parent().hide();
}
var method=data.method;
var confirm=data.confirm;
data.group_id=data.id||group_id;
delete data.method;
delete data.confirm;
delete data.id;
this._member_action_confirmation(confirm).done(function(){
if(method.indexOf('search_to_invite') >=0){
this.invite(group_id);
return;
}
$btn.data('ps-loading', true);
$loading.show();
this.member_action(method, data)
.done(function(json){
var $item=$btn.closest('.ps-members-item-wrapper'),
template,
templateData;
if(method.indexOf('passive') >=0){
if(json.reload){
window.location.reload();
return;
}
if(json.hide){
$item.remove();
if(!_.isUndefined(json.pending_user_member_count)){
peepso.observer.doAction('pending_user_member_count',
+data.group_id,
+json.pending_user_member_count
);
}
if(!_.isUndefined(json.pending_admin_member_count)){
peepso.observer.doAction('pending_admin_member_count',
+data.group_id,
+json.pending_admin_member_count
);
}}else{
if(!_.isUndefined(json.display_role)){
$item.find('.ps-members-item-role').html(json.display_role);
}
if(json.member_passive_actions&&json.member_passive_actions.length){
template=peepso.template(peepsogroupsdata.memberItemActionsTemplate);
templateData={
member_passive_actions: json.member_passive_actions,
id: data.group_id,
passive_user_id: data.passive_user_id
};
$item.find('.ps-js-dropdown').html(template(templateData));
}}
if(+peepsodata.currentuserid===+data.passive_user_id){
this._header_$actions.html(this._header_$actions_loadingHtml);
this._get_data(data.group_id).done(function(data){
this._data=data;
peepso.observer.applyFilters('group_data', data);
});
}
peepso.observer.doAction('notification_clear_cache');
}else if(method.match(/\.?join$/)){
window.location.reload();
}else if(method.indexOf('leave') >=0){
if(json.member_actions&&json.member_actions.length > 1){
this._update_header_actions(json);
}else{
window.location.reload();
}}else{
this._update_header_actions(json);
}})
.fail(function(errors){
$btn.removeData('ps-loading');
$loading.hide();
if(errors&&errors.length){
pswindow.show('', errors.join('
'));
}});
});
}, this)
);
$(document.body).on('click',
'.ps-js-groups .ps-js-more',
$.proxy(function(e){
e.preventDefault();
e.stopPropagation();
var $item=$(e.currentTarget).closest('.ps-js-group-item'),
$owner=$item.find('.ps-js-owner'),
$categories=$item.find('.ps-js-categories'),
$caticon=$item.find('.ps-js-category-icon');
if(+peepsogroupsdata.list_show_owner){
if(!$owner.data('ps-loaded')&&!$owner.data('ps-loading')){
$owner.data('ps-loading', true);
this.get_owners($owner.data('id')).done(function(owners){
$owner.data('ps-loaded', true);
$owner.removeData('ps-loading');
if(owners&&owners.length){
$owner.html('' + owners[0].fullname + ''
);
}else{
$owner.html('No owner');
}});
}}
if(!$categories.data('ps-loaded')&&!$categories.data('ps-loading')){
$categories.data('ps-loading', true);
this.get_categories($categories.data('id')).done(function(categories){
$categories.data('ps-loaded', true);
$categories.removeData('ps-loading');
if(categories&&categories.length){
categories=_.map(categories, function(category){
return '' + category.name + '';
});
$categories.html(categories.join(', '));
if(categories.length > 1){
$caticon.attr('class', 'ps-icon-tags');
}}else{
$categories.html('No category');
}});
}}, this)
);
$('.ps-js-focus .ps-js-privacy .ps-js-dropdown-menu').on('click',
'[data-option-value]',
function(e){
var $a=$(e.currentTarget),
$dd=$a.closest('.ps-js-dropdown-menu'),
$btn=$dd.siblings('.ps-js-dropdown-toggle'),
privacy=+$a.data('optionValue'),
params;
if(privacy===+peepsogroupsdata.privacy){
return;
}
params={
privacy: privacy,
group_id: peepsogroupsdata.group_id,
_wpnonce: peepsogroupsdata.nonce_set_group_privacy
};
pswindow.confirm(peepsogroupsdata.lang.privacy_change_confirmation, function(){
var $loading=$btn.find('img').show();
pswindow.hide();
peepso.getJson('groupajax.set_group_privacy', params, function(json){
var $btnIcon=$btn.find('i'),
$btnText=$btnIcon.siblings('span'),
privacy;
$loading.hide();
if(json.success){
privacy=json.data.new_privacy;
peepsogroupsdata.privacy=privacy.id;
$btnIcon.attr('class', privacy.icon);
$btnText.html(privacy.name);
$btn.addClass('ps-list-info-success');
setTimeout(function(){
$btn.removeClass('ps-list-info-success');
}, 1000);
peepso.observer.doAction('group_privacy_updated', params.group_id, {
id: privacy.id,
icon: privacy.icon,
name: privacy.name
});
}else if(json.errors){
psmessage.show('', json.errors[0]);
}});
});
}
);
$('.ps-js-focus-box-toggle').on('click', function(e){
var $box=$('.ps-js-focus-box'),
$doc=$(document),
evtName='click.ps-focusbox-toggle',
clsOpen='ps-focus__box--open';
e.stopPropagation();
if($box.hasClass(clsOpen)){
$box.removeClass(clsOpen);
$doc.off(evtName);
}else{
$box.addClass(clsOpen);
$doc.one(evtName, function(){
$box.removeClass(clsOpen);
});
}});
};
PsGroup.prototype._get_data=function(group_id){
return $.Deferred($.proxy(function(defer){
var params={
group_id: group_id,
context: 'cover',
keys: 'groupuserajax.member_actions,groupfollowerajax.follower_actions'
};
peepso.getJson('groupajax.group',
params,
$.proxy(function(response){
if(response.success){
defer.resolveWith(this, [response.data]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype._normalize_header_actions=function(actions, prefix){
return _.map(actions,
function(item){
var label=item.label||'',
firstChar=label.charAt(0);
if(firstChar.match(/[a-z]/)){
label=firstChar.toUpperCase() + label.slice(1);
}
item.label=label;
if(_.isString(item.action)&&item.action.indexOf('.') < 0){
item.action=prefix + '.' + item.action;
}else if(_.isArray(item.action)){
item.action=this._normalize_header_actions(item.action, prefix);
}
return item;
},
this
);
};
PsGroup.prototype._update_header_actions=function(data){
var template=peepso.template(peepsogroupsdata.headerActionsTemplate),
memberActions,
followerActions,
group;
data=data||{};
group=data.group||{};
if(group.groupuserajax&&!_.isUndefined(group.groupuserajax.member_actions)){
memberActions=group.groupuserajax.member_actions||[];
}else if(!_.isUndefined(data.member_actions)){
memberActions=data.member_actions||[];
}
if(memberActions){
memberActions=this._normalize_header_actions(memberActions, 'groupuserajax');
}
if(group.groupfollowerajax&&!_.isUndefined(group.groupfollowerajax.follower_actions)){
followerActions=group.groupfollowerajax.follower_actions||[];
}else if(!_.isUndefined(data.follower_actions)){
followerActions=data.follower_actions||[];
}
if(followerActions){
followerActions=this._normalize_header_actions(followerActions, 'groupfollowerajax');
}
this._header_actions=this._header_actions||{};
this._header_actions.member_actions=memberActions||this._header_actions.member_actions;
this._header_actions.follower_actions =
followerActions||this._header_actions.follower_actions;
this._header_$actions.html(template(this._header_actions));
_.defer($.proxy(function(){
var loc=window.location,
url=loc.href,
$btn,
$dropdown;
if(url.match(/#membership/)){
$btn=this._header_$actions.find('.ps-js-btn-membership');
$dropdown=$btn.siblings('.ps-js-dropdown-menu').show();
$btn.add($dropdown).addClass('ps-list-info-success');
setTimeout(function(){
$btn.add($dropdown).removeClass('ps-list-info-success');
}, 1000);
if('replaceState' in window.history){
history.replaceState('', document.title, loc.pathname + loc.search);
}}
}, this)
);
};
PsGroup.prototype.get_owners=function(group_id){
return $.Deferred($.proxy(function(defer){
var params={
group_id: group_id,
role: 'owner',
keys: 'fullname,profileurl'
};
peepso.getJson('groupusersajax.search',
params,
$.proxy(function(response){
if(response.data&&response.data.members){
defer.resolveWith(this, [response.data.members]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.get_members=function(group_id){
return $.Deferred($.proxy(function(defer){
var params={
group_id: group_id,
keys: 'avatar,fullname,profileurl,role'
};
peepso.getJson('groupusersajax.search',
params,
$.proxy(function(response){
if(response.data&&response.data.members){
defer.resolveWith(this, [response.data.members]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.get_categories=function(group_id){
return $.Deferred($.proxy(function(defer){
var params={
group_id: group_id,
keys: 'name,url'
};
peepso.getJson('groupcategoriesgroupsajax.categories_for_group',
params,
$.proxy(function(response){
if(response.data&&response.data.categories){
defer.resolveWith(this, [response.data.categories]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.join=function(group_id){
return $.Deferred($.proxy(function(defer){
peepso.postJson('groupuserajax.join',
{ group_id: group_id },
$.proxy(function(response){
if(response.success){
defer.resolveWith(this, [response.data]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.leave=function(group_id){
return $.Deferred($.proxy(function(defer){
peepso.postJson('groupuserajax.leave',
{ group_id: group_id },
$.proxy(function(response){
if(response.success){
defer.resolveWith(this, [response.data]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.invite=function(groupId){
peepso.groups.dlgInvite(groupId);
};
PsGroup.prototype.inviteUser=function(groupId, userId){
return $.Deferred($.proxy(function(defer){
peepso.getJson('groupuserajax.passive_invite',
{
group_id: groupId,
passive_user_id: userId
},
$.proxy(function(response){
if(response.success){
defer.resolveWith(this, [response.data]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.edit_name=function(groupId, elem){
var $ct=$(elem).closest('.ps-js-group-name'),
$text=$ct.find('.ps-js-group-name-text'),
$editor=$ct.find('.ps-js-group-name-editor'),
$btnEdit=$ct.find('.ps-js-btn-edit'),
$btnCancel=$ct.find('.ps-js-btn-cancel'),
$btnSubmit=$ct.find('.ps-js-btn-submit'),
$input=$editor.find('input[type=text]'),
$limit=$ct.find('.ps-js-limit'),
value=$input.val();
if($editor.is(':visible')){
return;
}
$text.hide();
$btnEdit.hide();
$btnCancel.show();
$btnSubmit.show();
$editor.show();
$input.focus();
_.defer(function(){
$input[0].selectionStart=$input[0].selectionEnd=value.length;
});
if(!$input.data('original-value')){
$input.data('original-value', value);
$input
.off('input keydown')
.on('input', function(e){
var currVal=$.trim($input.val()),
origVal=$.trim($input.data('original-value')),
maxLength=+$input.data('maxlength');
if(maxLength&&currVal.length > maxLength){
currVal=currVal.substr(0, maxLength);
$input.val(currVal);
}
$limit.html(maxLength - currVal.length);
if(!currVal||currVal===origVal){
$btnSubmit.attr('disabled', 'disabled');
}else{
$btnSubmit.removeAttr('disabled');
}})
.on('keydown', function(e){
if(e.keyCode===13){
e.preventDefault();
e.stopPropagation();
if(!$btnSubmit.attr('disabled')){
$btnSubmit.click();
}}
});
}
$input.trigger('input');
$btnCancel.off('click').on('click', function(){
$input.val($input.data('original-value'));
$editor.hide();
$btnSubmit.hide();
$btnCancel.hide();
$btnEdit.show();
$text.show();
});
$btnSubmit.off('click').on('click',
$.proxy(function(){
var confirmText=peepsogroupsdata.lang.name_change_confirmation;
pswindow.confirm(confirmText,
$.proxy(function(){
var $loading=$btnSubmit.find('img').show(),
value=$input.val();
pswindow.hide();
this._updateName(groupId, value)
.always(function(){
$loading.hide();
})
.done(function(){
$input.data('original-value', value);
$text.text(value);
$btnCancel.click();
})
.fail(function(error){
psmessage.show('', error);
});
}, this),
function(){
pswindow.hide();
$btnCancel.click();
}
);
}, this)
);
};
PsGroup.prototype._updateName=function(groupId, name){
var xhrID='_xhr_' + groupId,
xhr=this._updateName[xhrID];
if(xhr){
xhr.abort();
}
return $.Deferred($.proxy(function(defer){
var xhr=peepso.postJson('groupajax.set_group_name',
{
group_id: groupId,
name: name,
_wpnonce: peepsogroupsdata.nonce_set_group_name
},
$.proxy(function(json){
if(json.success){
peepso.observer.doAction('group_name_updated', groupId, name);
defer.resolve();
}else if(json.errors){
defer.reject(json.errors[0]);
}else{
defer.reject();
}}, this)
);
this._updateName[xhrID]=xhr.ret;
}, this)
);
};
PsGroup.prototype.edit_slug=function(group_id, elem){
var $ct=$(elem).closest('.ps-js-group-slug'),
$text=$ct.find('.ps-js-group-slug-text'),
$editor=$ct.find('.ps-js-group-slug-editor'),
$trigger=$ct.find('.ps-js-group-slug-trigger'),
$input,
$submit,
value;
if($editor.is(':visible')){
return;
}
$text.hide();
$trigger.hide();
$editor.show();
$submit=$editor.find('.ps-js-submit');
$input=$editor.find('input');
$input.data('original-value', (value=$input.val()));
$input
.focus()
.val('')
.val(value);
$editor.off('click input');
$editor.on('click', '.ps-js-cancel', function(){
$input.val(value);
$editor.off('click').hide();
$text.show();
$trigger.show();
});
$editor.on('click',
'.ps-js-submit',
$.proxy(function(e){
this.save_slug(group_id, $input.val(), e.currentTarget);
}, this)
);
$editor.on('input', 'input', function(e){
var $input=$(e.currentTarget),
$limit=$input.closest('.ps-js-group-slug').find('.ps-js-limit'),
maxLength=+$input.data('maxlength'),
val=$input.val();
if(maxLength&&val.length > maxLength){
val=val.substr(0, maxLength);
$input.val(val);
}
$limit.html(maxLength - val.length);
if($.trim(val)){
$submit.removeAttr('disabled');
}else{
$submit.attr('disabled', 'disabled');
}});
$input.trigger('input');
};
PsGroup.prototype.save_slug=function(group_id, slug, elem){
var flag='save_slug',
$loading;
if(this.ajax[flag]){
return;
}
this.ajax[flag]=true;
slug=$.trim(slug);
$loading=$(elem).find('.ps-js-loading');
$loading.show();
peepso.postJson('groupajax.set_group_slug',
{
group_id: group_id,
slug: slug,
_wpnonce: peepsogroupsdata.nonce_set_group_slug
},
$.proxy(function(json){
var $ct=$(elem).closest('.ps-js-group-slug'),
$text=$ct.find('.ps-js-group-slug-text'),
$editor=$ct.find('.ps-js-group-slug-editor'),
$trigger=$ct.find('.ps-js-group-slug-trigger'),
$input=$editor.find('input');
this.ajax[flag]=false;
$loading.hide();
if(json.success){
window.location=json.data.redirect;
}else if(json.errors){
psmessage.show('', json.errors[0]);
}}, this)
);
};
PsGroup.prototype.save_name=function(group_id, name, elem){
var flag='save_name',
$loading;
if(this.ajax[flag]){
return;
}
this.ajax[flag]=true;
name=$.trim(name);
$loading=$(elem).find('.ps-js-loading');
$loading.show();
peepso.postJson('groupajax.set_group_name',
{
group_id: group_id,
name: name,
_wpnonce: peepsogroupsdata.nonce_set_group_name
},
$.proxy(function(json){
var $ct=$(elem).closest('.ps-js-group-name'),
$text=$ct.find('.ps-js-group-name-text'),
$editor=$ct.find('.ps-js-group-name-editor'),
$trigger=$ct.find('.ps-js-group-name-trigger'),
$input=$editor.find('input');
this.ajax[flag]=false;
$loading.hide();
if(json.success){
$input.val(name);
$editor.off('click').hide();
$text.text(name).show();
$trigger.show();
if(json.data&&json.data.redirect){
window.location=json.data.redirect;
}}else if(json.errors){
psmessage.show('', json.errors[0]);
}}, this)
);
};
PsGroup.prototype.edit_cats=function(group_id, elem){
var $ct=$(elem).closest('.ps-js-group-cat'),
$text=$ct.find('.ps-js-group-cat-text'),
$editor=$ct.find('.ps-js-group-cat-editor'),
$trigger=$ct.find('.ps-js-btn-edit'),
$checkboxes,
value;
if($editor.is(':visible')){
return;
}
$text.hide();
$editor.show();
$trigger.hide();
$checkboxes=$editor.find('input[type=checkbox], input[type=radio]');
$checkboxes.each(function(){
$(this).data('original-value', this.checked);
});
$editor.off('click');
$editor.on('click', '.ps-js-cancel', function(){
$checkboxes.each(function(){
this.checked=$(this).data('original-value');
});
$editor.off('click').hide();
$text.show();
$trigger.show();
});
$editor.on('click',
'.ps-js-submit',
$.proxy(function(e){
var value=$checkboxes
.filter(function(){
return this.checked;
})
.map(function(){
return +this.value;
});
value=Array.prototype.slice.call(value);
this.save_cats(group_id, value, e.currentTarget);
}, this)
);
$editor.on('click', 'input[type=checkbox], input[type=radio]', function(e){
var $input=$(e.currentTarget),
$submit=$editor.find('.ps-js-submit'),
selectedCount;
selectedCount=$checkboxes.filter(function(){
return this.checked;
}).length;
if(selectedCount >=1){
$submit.removeAttr('disabled');
}else{
$submit.attr('disabled', 'disabled');
}});
};
PsGroup.prototype.save_cats=function(group_id, category_id, elem){
var flag='save_cats',
$loading;
if(this.ajax[flag]){
return;
}
this.ajax[flag]=true;
$loading=$(elem).find('.ps-js-loading');
$loading.show();
peepso.postJson('groupajax.set_group_categories',
{
group_id: group_id,
category_id: category_id,
_wpnonce: peepsogroupsdata.nonce_set_group_categories
},
$.proxy(function(json){
var $ct=$(elem).closest('.ps-js-group-cat'),
$text=$ct.find('.ps-js-group-cat-text'),
$editor=$ct.find('.ps-js-group-cat-editor'),
$trigger=$ct.find('.ps-js-btn-edit'),
$checkboxes=$editor.find('input[type=checkbox], input[type=radio]'),
html=[];
this.ajax[flag]=false;
$loading.hide();
if(json.success){
$checkboxes.each(function(){
this.checked=category_id.indexOf(+this.value) >=0;
if(this.checked){
html.push([
'',
$(this)
.next('label')
.text(),
''
].join('')
);
}});
$editor.off('click').hide();
$text.html(html.join('')).show();
$trigger.show();
}else if(json.errors){
psmessage.show('', json.errors[0]);
}}, this)
);
};
PsGroup.prototype.edit_desc=function(group_id, elem){
var $ct=$(elem).closest('.ps-js-group-desc'),
$text=$ct.find('.ps-js-group-desc-text'),
$placeholder=$ct.find('.ps-js-group-desc-placeholder'),
$editor=$ct.find('.ps-js-group-desc-editor'),
$trigger=$ct.find('.ps-js-btn-edit'),
$textarea,
value;
if($editor.is(':visible')){
return;
}
$text.hide();
$placeholder.hide();
$editor.show();
$trigger.hide();
$submit=$editor.find('.ps-js-submit');
$textarea=$editor.find('textarea');
$textarea.data('original-value', (value=$textarea.val()));
$textarea
.focus()
.val('')
.val(value);
$editor.off('click input');
$editor.on('click', '.ps-js-cancel', function(){
$textarea.val(value);
$editor.off('click').hide();
$trigger.show();
if($.trim(value)){
$text.show();
$placeholder.hide();
}else{
$text.hide();
$placeholder.show();
}});
$editor.on('click',
'.ps-js-submit',
$.proxy(function(e){
this.save_desc(group_id, $textarea.val(), e.currentTarget);
}, this)
);
$editor.on('input', 'textarea', function(e){
var $input=$(e.currentTarget),
$limit=$input.closest('.ps-js-group-desc').find('.ps-js-limit'),
maxLength=+$input.data('maxlength'),
val=$input.val();
if(maxLength&&val.length > maxLength){
val=val.substr(0, maxLength);
$input.val(val);
}
$limit.html(maxLength - val.length);
if($.trim(val)){
$submit.removeAttr('disabled');
}else{
$submit.attr('disabled', 'disabled');
}});
$textarea.trigger('input');
};
PsGroup.prototype.save_desc=function(group_id, description, elem){
var flag='save_desc',
$loading;
if(this.ajax[flag]){
return;
}
this.ajax[flag]=true;
description=$.trim(description||'');
$loading=$(elem).find('.ps-js-loading');
$loading.show();
peepso.postJson('groupajax.set_group_description',
{
group_id: group_id,
description: description,
_wpnonce: peepsogroupsdata.nonce_set_group_description
},
$.proxy(function(json){
var $ct=$(elem).closest('.ps-js-group-desc'),
$text=$ct.find('.ps-js-group-desc-text'),
$placeholder=$ct.find('.ps-js-group-desc-placeholder'),
$editor=$ct.find('.ps-js-group-desc-editor'),
$trigger=$ct.find('.ps-js-btn-edit'),
$textarea=$editor.find('textarea');
this.ajax[flag]=false;
$loading.hide();
if(json.success){
$textarea.val(description);
$editor.off('click').hide();
$trigger.show();
description=_.escape($.trim(description));
description=description.replace(/(?:\r\n|\r|\n)/g, '
');
if(description){
$text.html(description).show();
$placeholder.hide();
}else{
$text.text(description).hide();
$placeholder.show();
}}else if(json.errors){
psmessage.show('', json.errors[0]);
}}, this)
);
};
PsGroup.prototype._member_action_confirmation=function(confirm){
return $.Deferred($.proxy(function(defer){
if(confirm){
pswindow.confirm(confirm,
$.proxy(function(){
pswindow.hide();
defer.resolveWith(this);
}, this),
$.proxy(function(){
defer.rejectWith(this);
}, this)
);
}else{
defer.resolveWith(this);
}}, this)
);
};
PsGroup.prototype.member_action=function(method, data){
return $.Deferred($.proxy(function(defer){
if((method||'').indexOf('.') < 0){
method='groupuserajax.' + method;
}
peepso.postJson(method,
data,
$.proxy(function(response){
if(response.data){
defer.resolveWith(this, [response.data]);
}else{
defer.rejectWith(this, [response.errors]);
}}, this)
);
}, this)
);
};
PsGroup.prototype.init=function(){
jQuery('.js-focus-cover').hover(function(){
if(false===pswindow.is_visible) jQuery('.js-focus-change-cover').show();
},
function(){
jQuery('.js-focus-change-cover').hide();
}
);
jQuery('.ps-tab__bar').unbind('click');
var that=this;
this.$cover_image
.one('load', function(){
that.fix_horizontal_padding();
})
.each(function(){
if(this.complete){
jQuery(this).load();
}});
jQuery(window).on('resize.focus-image',
jQuery.proxy(this.fix_horizontal_padding_debounced, this)
);
};
PsGroup.prototype.fix_horizontal_padding=function(){
var ctWidth, ctHeight, imgHeight;
this.$cover_image.css({
height: 'auto',
width: '100%',
minWidth: '100%',
maxWidth: '100%'
});
ctHeight=this.$cover_ct.width() * 0.375;
ctHeight=Math.max(ctHeight, this.$cover_ct.height());
imgHeight=this.$cover_image.height();
if(imgHeight < ctHeight){
this.$cover_image.css({
height: ctHeight,
width: 'auto',
minWidth: '100%',
maxWidth: 'none'
});
}
this.initial_cover_position=this.$cover_image.attr('style');
};
PsGroup.prototype.fix_horizontal_padding_debounced=_.debounce(function(){
this.fix_horizontal_padding();
}, 300);
PsGroup.prototype.show_avatar_dialog=function(){
jQuery('.ps-js-error').html('');
var $dialog=jQuery('#dialog-upload-avatar');
var title=$dialog.find('#dialog-upload-avatar-title').html();
var content=$dialog.find('#dialog-upload-avatar-content').html();
var actions=$dialog.find('.dialog-action').html();
var inst=pswindow.show(title, content).set_actions(actions);
var elem=inst.$container.find('.ps-dialog');
elem.addClass('ps-dialog-wide');
peepso.observer.addFilter('pswindow_close',
function(){
elem.removeClass('ps-dialog-wide');
},
10,
1
);
this.init_avatar_fileupload();
jQuery('#ps-window').on('pswindow.hidden', function(){
jQuery('.upload-avatar .fileupload:visible').psFileupload('destroy');
});
};
PsGroup.prototype.init_avatar_fileupload=function(){
var that=this;
jQuery('.upload-avatar .fileupload:visible').psFileupload({
formData: { group_id: peepsogroupsdata.group_id, _wpnonce: jQuery('#_covernonce').val() },
dataType: 'json',
url: peepsodata.ajaxurl_legacy + 'groupajax.avatar_upload?avatar',
add: function(e, data){
var acceptFileTypes=/(\.|\/)(jpe?g|png)$/i;
if(data.files[0]['type'].length&&!acceptFileTypes.test(data.files[0]['type'])){
var error_filetype=jQuery('#profile-avatar-error-filetype').text();
jQuery('.ps-js-error').html(error_filetype);
}else if(parseInt(data.files[0]['size']) > peepsodata.upload_size){
var error_filesize=jQuery('#profile-avatar-error-filesize').text();
jQuery('.ps-js-error').html(error_filesize);
}else{
jQuery('#ps-window .ps-loading-image').show();
jQuery(
'#ps-window .show-avatar, #ps-window .show-thumbnail, #ps-window .upload-avatar'
).hide();
jQuery('.ps-js-error').hide();
pswindow.refresh();
data.submit();
}},
done: function(e, data){
var response=data.result;
if(response.success){
var content_html=jQuery('#dialog-upload-avatar-content', jQuery(response.data.html));
var actions=jQuery('#dialog-upload-avatar .dialog-action').html();
var rand='?' + Math.random();
jQuery('.js-focus-avatar img', content_html).attr('src', response.data.image_url + rand);
jQuery('.imagePreview img', content_html).attr('src',
response.data.orig_image_url + rand
);
jQuery('.imagePreview', content_html).after(''
);
jQuery('.ps-js-has-avatar', content_html).show();
jQuery('.ps-js-no-avatar', content_html).hide();
pswindow.set_content(content_html);
pswindow.set_actions(actions);
jQuery('#imagePreview img').one('load', function(){
pswindow.refresh();
});
that.init_avatar_fileupload();
jQuery('#ps-window button[name=rep_submit]')
.removeAttr('disabled')
.addClass('ps-btn-primary');
that.invalid_avatar_upload=false;
that.avatar_use_gravatar=false;
}else{
jQuery(
'#ps-window .show-avatar, #ps-window .show-thumbnail, #ps-window .upload-avatar'
).show();
jQuery('.ps-js-error')
.html(response.errors)
.show();
jQuery('#ps-window .ps-loading-image').hide();
jQuery('#ps-window button[name=rep_submit]')
.attr('disabled', 'disabled')
.removeClass('ps-btn-primary');
that.invalid_avatar_upload=true;
}}
});
};
PsGroup.prototype.confirm_avatar=function(elem){
var fn, req;
if(this.invalid_avatar_upload){
return;
}
fn=this.confirm_avatar;
if(fn._loading){
return;
}
fn._loading=true;
if(elem){
elem=jQuery(elem);
elem.attr('disabled', 'disabled');
}
req={
group_id: peepsogroupsdata.group_id,
module_id: peepsogroupsdata.module_id,
_wpnonce: jQuery('#_covernonce').val()
};
peepso.postJson('groupajax.avatar_confirm', req, function(json){
if(json&&json.success){
window.location.reload();
return;
}
fn._loading=false;
if(elem){
elem.removeAttr('disabled');
}});
};
PsGroup.prototype.confirm_remove_avatar=function(){
var title=jQuery('#delete-confirmation #delete-title').html();
var content=jQuery('#delete-confirmation #delete-content').html();
pswindow.show(title, content);
};
PsGroup.prototype.remove_avatar=function(user_id){
var req={
group_id: peepsogroupsdata.group_id,
user_id: user_id,
_wpnonce: jQuery('#_covernonce').val()
};
peepso.postJson('groupajax.avatar_delete', req, function(json){
if(json.success){
window.location.reload();
}});
};
PsGroup.prototype.confirm_remove_cover_photo=function(){
var title=jQuery('#delete-confirmation #delete-title').html();
var content=jQuery('#delete-confirmation #delete-content').html();
pswindow.show(title, content);
};
PsGroup.prototype.remove_cover_photo=function(user_id){
var req={ group_id: peepsogroupsdata.group_id, _wpnonce: jQuery('#_covernonce').val() };
peepso.postJson('groupajax.cover_delete', req, function(json){
if(json.success){
window.location.reload();
}});
};
PsGroup.prototype.reposition_cover=function(){
jQuery('.js-focus-gradient', '.js-focus-cover').hide();
jQuery('.js-focus-change-cover > a', '.js-focus-cover').hide();
jQuery('.reposition-cover-actions', '.js-focus-cover').show();
jQuery('.js-focus-cover').addClass('ps-focus-cover-edit');
var that=this;
var g =
jQuery('.js-focus-cover').height() - jQuery('img#' + peepsogroupsdata.group_id).height();
var w=jQuery('.js-focus-cover').width() - jQuery('img#' + peepsogroupsdata.group_id).width();
jQuery('img#' + peepsogroupsdata.group_id).draggable({
cursor: 'move',
drag: function(a, b){
b.position.top < g&&(b.position.top=g),
b.position.top > 0&&(b.position.top=0),
b.position.left < w&&(b.position.left=w),
b.position.left > 0&&(b.position.left=0);
},
stop: function(a, c){
var d=jQuery('img#' + peepsogroupsdata.group_id),
e=d.closest('.js-focus-cover'),
x=(100 * c.position.top) / e.height();
x=Math.round(1e4 * x) / 1e4;
y=(100 * c.position.left) / e.width();
y=Math.round(1e4 * y) / 1e4;
that.cover.x_position_percent=x;
that.cover.y_position_percent=y;
d.css('top', x + '%');
d.css('left', y + '%');
}});
};
PsGroup.prototype.cancel_reposition_cover=function(){
jQuery('.js-focus-gradient', '.js-focus-cover').show();
jQuery('.js-focus-change-cover > a', '.js-focus-cover').show();
jQuery('.reposition-cover-actions', '.js-focus-cover').hide();
jQuery('.js-focus-cover').removeClass('ps-focus-cover-edit');
jQuery('img#' + peepsogroupsdata.group_id).attr('style', this.initial_cover_position);
jQuery('img#' + peepsogroupsdata.group_id).draggable('destroy');
};
PsGroup.prototype.save_reposition_cover=function(){
var req={
group_id: peepsogroupsdata.group_id,
x: this.cover.x_position_percent,
y: this.cover.y_position_percent,
_wpnonce: jQuery('#_covernonce').val()
};
var that=this;
jQuery('.reposition-cover-actions', '.js-focus-cover').hide();
jQuery('.ps-reposition-loading', '.js-focus-cover').show();
jQuery('.js-focus-cover').removeClass('ps-focus-cover-edit');
peepso.postJson('groupajax.cover_reposition', req, function(json){
jQuery('.ps-reposition-loading', '.js-focus-cover').hide();
that.initial_cover_position=jQuery('img#' + peepsogroupsdata.group_id).attr('style');
that.cancel_reposition_cover();
});
};
PsGroup.prototype.show_cover_dialog=function(){
jQuery('.ps-js-error').html('');
var $dialog=jQuery('#dialog-upload-cover');
var title=$dialog.find('#dialog-upload-cover-title').html();
var content=$dialog.find('#dialog-upload-cover-content').html();
pswindow.show(title, content);
this.init_cover_fileupload();
jQuery('#ps-window').on('pswindow.hidden', function(){
jQuery('.upload-cover .fileupload:visible').psFileupload('destroy');
});
};
PsGroup.prototype.init_cover_fileupload=function(){
var that=this;
jQuery('.upload-cover .fileupload:visible').psFileupload({
formData: {
group_id: peepsogroupsdata.group_id,
module_id: peepsogroupsdata.module_id,
_wpnonce: jQuery('#_covernonce').val()
},
dataType: 'json',
url: peepsodata.ajaxurl_legacy + 'groupajax.cover_upload?cover',
add: function(e, data){
var acceptFileTypes=/(\.|\/)(jpe?g|png)$/i;
if(data.files[0]['type'].length&&!acceptFileTypes.test(data.files[0]['type'])){
var error_filetype=jQuery('#profile-cover-error-filetype').text();
jQuery('.ps-js-error').html(error_filetype);
}else if(parseInt(data.files[0]['size']) > peepsodata.upload_size){
var error_filesize=jQuery('#profile-cover-error-filesize').text();
jQuery('.ps-js-error').html(error_filesize);
}else{
jQuery('#ps-window .ps-loading-image').show();
jQuery('#ps-window .upload-cover').hide();
data.submit();
}},
done: function(e, data){
var response=data.result;
jQuery('#ps-window .ps-loading-image').hide();
jQuery('#ps-window .upload-cover').show();
if(response.success){
jQuery('.cover-image')
.attr('src', response.data.image_url + '?' + Math.random())
.css('top', '0')
.css('left', '0')
.removeClass('default')
.addClass('has-cover');
pswindow.fade_out('slow');
jQuery('#profile-reposition-cover').show();
jQuery('#dialog-upload-cover-content').html(response.data.html);
pswindow.set_content(jQuery('#dialog-upload-cover-content', response.data.html).html());
that.fix_horizontal_padding_debounced();
that.init_cover_fileupload();
}else{
jQuery('.ps-js-error').html(response.errors);
}}
});
};
PsGroup.prototype.showAvatarDialog=function(){
var data;
if(peepsogroupsdata.id){
if(!this.avatarDialog){
data={
id: +peepsogroupsdata.id,
name: peepsogroupsdata.name,
hasAvatar: +peepsogroupsdata.hasAvatar,
imgAvatar: peepsogroupsdata.imgAvatar,
imgOriginal: peepsogroupsdata.imgOriginal
};
if(!data.hasAvatar){
data.imgOriginal='';
}
this.avatarDialog=new PsGroupAvatarDialog(data);
}
this.avatarDialog.show();
}};
PsGroup.prototype.edit_property=function(elem, groupId, propertyName){
var $ct=$(elem).closest('.ps-js-group-' + propertyName),
$text=$ct.find('.ps-js-text'),
$editor=$ct.find('.ps-js-editor'),
$btnEdit=$ct.find('.ps-js-btn-edit'),
$btnCancel=$ct.find('.ps-js-btn-cancel'),
$btnSubmit=$ct.find('.ps-js-btn-submit'),
$input=$editor.find('select[name="' + propertyName + '"]'),
value=$input.val();
if($editor.is(':visible')){
return;
}
$text.hide();
$btnEdit.hide();
$btnCancel.show();
$btnSubmit.show();
$editor.show();
if($input.data('psInitialized')){
return;
}
$input.data('psInitialized', 1);
$input.data('initialValue', value);
$input.off('change').on('change', function(){
var $input=$(this),
currentValue=$input.val(),
initialValue=$input.data('initialValue');
if(!currentValue||currentValue===initialValue){
$btnSubmit.attr('disabled', 'disabled');
}else{
$btnSubmit.removeAttr('disabled');
}});
$btnCancel.off('click').on('click', function(){
$input.val($input.data('initialValue'));
$editor.hide();
$btnSubmit.hide();
$btnCancel.hide();
$btnEdit.show();
$text.show();
});
$btnSubmit.off('click').on('click', function(){
var $loading=$btnSubmit.find('img'),
value=$input.val();
if($loading.is(':visible')){
return;
}
$loading.show();
peepso.postJson('groupajax.set_group_property',
{
group_id: groupId,
property_name: propertyName,
property_value: value,
_wpnonce: peepsogroupsdata.nonce_set_group_property
},
function(json){
$loading.hide();
if(json.success){
$input.data('initialValue', value);
$text.html($input.children('option:selected').text());
}
$btnCancel.click();
}
);
});
};
return PsGroup;
});